home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / New System Software Extensions / Thread Manager Extension 2.0.1 / Compiler Stuff / Interfaces / UniversalCIncludes / Threads.h
Encoding:
C/C++ Source or Header  |  1994-06-03  |  5.1 KB  |  150 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        Threads.h
  3.  
  4.     Copyright:    © 1984-1994 by Apple Computer, Inc., all rights reserved.
  5.  
  6. */
  7.  
  8. #ifndef __THREADS__
  9. #define __THREADS__
  10.  
  11. #include <Memory.h>
  12.  
  13. #define gestaltThreadMgrAttr 'thds'
  14.  
  15. enum  {
  16.     gestaltThreadMgrPresent        = 0,
  17.     gestaltSpecificMatchSupport    = 1,
  18.     gestaltThreadsLibraryPresent = 2
  19. };
  20.  
  21. typedef unsigned short ThreadState;
  22.  
  23. #define kReadyThreadState ((ThreadState) 0)
  24.  
  25. #define kStoppedThreadState ((ThreadState) 1)
  26.  
  27. #define kRunningThreadState ((ThreadState) 2)
  28.  
  29. typedef void *ThreadTaskRef;
  30.  
  31. typedef unsigned long ThreadStyle;
  32.  
  33. #define kCooperativeThread (1<<0)
  34.  
  35. #define kPreemptiveThread (1<<1)
  36.  
  37. typedef unsigned long ThreadID;
  38.  
  39. #define kNoThreadID ((ThreadID) 0)
  40.  
  41. #define kCurrentThreadID ((ThreadID) 1)
  42.  
  43. #define kApplicationThreadID ((ThreadID) 2)
  44.  
  45. typedef unsigned long ThreadOptions;
  46.  
  47. #define kNewSuspend (1<<0)
  48.  
  49. #define kUsePremadeThread (1<<1)
  50.  
  51. #define kCreateIfNeeded (1<<2)
  52.  
  53. #define kFPUNotNeeded (1<<3)
  54.  
  55. #define kExactMatchThread (1<<4)
  56.  
  57. #if defined(powerc) || defined (__powerc)
  58. #pragma options align=mac68k
  59. #endif
  60. struct SchedulerInfoRec {
  61.     unsigned long                InfoRecSize;
  62.     ThreadID                    CurrentThreadID;
  63.     ThreadID                    SuggestedThreadID;
  64.     ThreadID                    InterruptedCoopThreadID;
  65. };
  66. #if defined(powerc) || defined(__powerc)
  67. #pragma options align=reset
  68. #endif
  69.  
  70. typedef struct SchedulerInfoRec SchedulerInfoRec;
  71.  
  72. typedef SchedulerInfoRec *SchedulerInfoRecPtr;
  73.  
  74. typedef void *voidPtr;
  75.  
  76. typedef pascal voidPtr(*ThreadEntryProcPtr)(void *threadParam);
  77.  
  78. typedef pascal ThreadID (*ThreadSchedulerProcPtr)(SchedulerInfoRecPtr schedulerInfo);
  79.  
  80. typedef pascal void (*ThreadSwitchProcPtr)(ThreadID threadBeingSwitched, void *switchProcParam);
  81.  
  82. typedef pascal void (*ThreadTerminationProcPtr)(ThreadID threadTerminated, void *terminationProcParam);
  83.  
  84. typedef pascal void (*DebuggerNewThreadProcPtr)(ThreadID threadCreated);
  85.  
  86. typedef pascal void (*DebuggerDisposeThreadProcPtr)(ThreadID threadDeleted);
  87.  
  88. typedef pascal ThreadID (*DebuggerThreadSchedulerProcPtr)(SchedulerInfoRecPtr schedulerInfo);
  89.  
  90. enum  {
  91.     threadTooManyReqsErr        = -617,
  92.     threadNotFoundErr            = -618,
  93.     threadProtocolErr            = -619
  94. };
  95.  
  96. #ifdef __cplusplus
  97. extern "C" {
  98. #endif
  99.  
  100. extern pascal OSErr CreateThreadPool(ThreadStyle threadStyle, short numToCreate, Size stackSize)
  101.  THREEWORDINLINE(0x303C, 0x0501, 0xABF2);
  102. extern pascal OSErr GetFreeThreadCount(ThreadStyle threadStyle, short *freeCount)
  103.  THREEWORDINLINE(0x303C, 0x0402, 0xABF2);
  104. extern pascal OSErr GetSpecificFreeThreadCount(ThreadStyle threadStyle, Size stackSize, short *freeCount)
  105.  THREEWORDINLINE(0x303C, 0x0615, 0xABF2);
  106. extern pascal OSErr GetDefaultThreadStackSize(ThreadStyle threadStyle, Size *stackSize)
  107.  THREEWORDINLINE(0x303C, 0x0413, 0xABF2);
  108. extern pascal OSErr ThreadCurrentStackSpace(ThreadID thread, unsigned long *freeStack)
  109.  THREEWORDINLINE(0x303C, 0x0414, 0xABF2);
  110. extern pascal OSErr NewThread(ThreadStyle threadStyle, ThreadEntryProcPtr threadEntry, void *threadParam, Size stackSize, ThreadOptions options, void **threadResult, ThreadID *threadMade)
  111.  THREEWORDINLINE(0x303C, 0x0E03, 0xABF2);
  112. extern pascal OSErr DisposeThread(ThreadID threadToDump, void *threadResult, Boolean recycleThread)
  113.  THREEWORDINLINE(0x303C, 0x0504, 0xABF2);
  114. extern pascal OSErr YieldToThread(ThreadID suggestedThread)
  115.  THREEWORDINLINE(0x303C, 0x0205, 0xABF2);
  116. extern pascal OSErr YieldToAnyThread(void)
  117.  FOURWORDINLINE(0x42A7, 0x303C, 0x0205, 0xABF2);
  118. extern pascal OSErr GetCurrentThread(ThreadID *currentThreadID)
  119.  THREEWORDINLINE(0x303C, 0x0206, 0xABF2);
  120. extern pascal OSErr GetThreadState(ThreadID threadToGet, ThreadState *threadState)
  121.  THREEWORDINLINE(0x303C, 0x0407, 0xABF2);
  122. extern pascal OSErr SetThreadState(ThreadID threadToSet, ThreadState newState, ThreadID suggestedThread)
  123.  THREEWORDINLINE(0x303C, 0x0508, 0xABF2);
  124. extern pascal OSErr SetThreadStateEndCritical(ThreadID threadToSet, ThreadState newState, ThreadID suggestedThread)
  125.  THREEWORDINLINE(0x303C, 0x0512, 0xABF2);
  126. extern pascal OSErr SetThreadScheduler(ThreadSchedulerProcPtr threadScheduler)
  127.  THREEWORDINLINE(0x303C, 0x0209, 0xABF2);
  128. extern pascal OSErr SetThreadSwitcher(ThreadID thread, ThreadSwitchProcPtr threadSwitcher, void *switchProcParam, Boolean inOrOut)
  129.  THREEWORDINLINE(0x303C, 0x070A, 0xABF2);
  130. extern pascal OSErr SetThreadTerminator(ThreadID thread, ThreadTerminationProcPtr threadTerminator, void *terminationProcParam)
  131.  THREEWORDINLINE(0x303C, 0x0611, 0xABF2);
  132. extern pascal OSErr ThreadBeginCritical(void)
  133.  THREEWORDINLINE(0x303C, 0x000B, 0xABF2);
  134. extern pascal OSErr ThreadEndCritical(void)
  135.  THREEWORDINLINE(0x303C, 0x000C, 0xABF2);
  136. extern pascal OSErr SetDebuggerNotificationProcs(DebuggerNewThreadProcPtr notifyNewThread, DebuggerDisposeThreadProcPtr notifyDisposeThread, DebuggerThreadSchedulerProcPtr notifyThreadScheduler)
  137.  THREEWORDINLINE(0x303C, 0x060D, 0xABF2);
  138. extern pascal OSErr GetThreadCurrentTaskRef(ThreadTaskRef *threadTRef)
  139.  THREEWORDINLINE(0x303C, 0x020E, 0xABF2);
  140. extern pascal OSErr GetThreadStateGivenTaskRef(ThreadTaskRef threadTRef, ThreadID threadToGet, ThreadState *threadState)
  141.  THREEWORDINLINE(0x303C, 0x060F, 0xABF2);
  142. extern pascal OSErr SetThreadReadyGivenTaskRef(ThreadTaskRef threadTRef, ThreadID threadToSet)
  143.  THREEWORDINLINE(0x303C, 0x0410, 0xABF2);
  144. #ifdef __cplusplus
  145. }
  146. #endif
  147.  
  148. #endif
  149.  
  150.